<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: 打印</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/print.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>print</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="print.txt">print.txt</a> </b>     适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis


打印                                                    <b class="vimtag"> <a name="printing">printing</a> </b>

1. 简介                                  <a href="print.html#print-intro">print-intro</a> 
2. 打印选项                              <a href="print.html#print-options">print-options</a> 
3. PostScript 打印                       <a href="print.html#postscript-printing">postscript-printing</a> 
4. PostScript 打印编码                   <a href="print.html#postscript-print-encoding">postscript-print-encoding</a> 
5. PostScript CJK 打印                   <a href="print.html#postscript-cjk-printing">postscript-cjk-printing</a> 
6. PostScript 打印疑难解答               <a href="print.html#postscript-print-trouble">postscript-print-trouble</a> 
7. PostScript 工具                       <a href="print.html#postscript-print-util">postscript-print-util</a> 
8. 换页字符                              <a href="print.html#printing-formfeed">printing-formfeed</a> 

<code class="notvi">{仅当编译时加入  <a href="various.html#+printer">+printer</a>  特性才有效}</code>

</section><hr class="doubleline" /><section class=inner>
<h4>1. 简介                                                 <b class="vimtag"> <a name="print-intro">print-intro</a> </b></h4>
在 MS-Windows 上 Vim 可以在任何打印机上打印你的文本。在别的系统上，它产生一个
PostScript 文件。该文件能直接发送到 PostScript 打印机上，也能通过类似
ghostscript 的程序用在别的打印机上。

<code class="note">备注</code>: 如果用  <a href="print.html#:hardcopy">:hardcopy</a>  打印有问题，还有一个办法是用  <a href="syntax.html#:TOhtml">:TOhtml</a>  并在浏览器上打
印生成的 html。

                                        <b class="vimtag"> <a name=":ha">:ha</a> </b> <b class="vimtag"> <a name=":hardcopy">:hardcopy</a> </b> <b class="vimtag"> <a name="E237">E237</a> </b> <b class="vimtag"> <a name="E238">E238</a> </b> <b class="vimtag"> <a name="E324">E324</a> </b>
:<code class="special">[range]</code>ha[rdcopy][!] <code class="special">[arguments]</code>
                        打印 <code class="special">[range]</code> 指定的行 (缺省是整个文件)。

                        在 MS-Windows 上，会显示打印对话框，用来选择打印机和
                        纸张尺寸等。[!] 版本跳过对话框。这里，打印机由
                        <a href="options.html#'printdevice'">'printdevice'</a> 指定。如果 <a href="options.html#'printdevice'">'printdevice'</a> 为空，就使用
                        系统缺省打印机。

                        对于非 MS-Windows 的系统，先在一个临时文件写入
                        Postscript，然后用 <a href="options.html#'printexpr'">'printexpr'</a> 打印它。这时，
                        <code class="special">[arguments]</code> 可以在 <a href="options.html#'printexpr'">'printexpr'</a> 里通过  <a href="eval.html#v:cmdarg">v:cmdarg</a>  得
                        到。
                        否则的话，<code class="special">[arguments]</code> 被忽略。<a href="options.html#'printoptions'">'printoptions'</a> 可以用来
                        指定纸张尺寸，是否双面打印，等等。
                        <code class="note">备注</code>: 如果要 pdf，有 "ps2pdf" 这样的工具可把
                        PostScript 转换为 PDF。

:<code class="special">[range]</code>ha[rdcopy][!] &gt;<code class="special">{filename}</code>
                        同上，但把 Postscript 打印到文件 <code class="special">{filename}</code>。
                        其中，"%" 等结构通过  <a href="cmdline.html#cmdline-special">cmdline-special</a>  得到扩展。
                        需要小心的是，现存的同名文件将被不加提示的覆盖。
                        <code class="notvi">{仅当编译时加入  <a href="various.html#+postscript">+postscript</a>  特性才能有此功能}</code>
                        在 MS-Windows 上应使用打印机驱动程序的 "输出到文件"
                        功能。

打印过程中显示完成的页号和百分比。要中断打印，按中断键 (<code class="keystroke">CTRL-C</code> 或者在 MS-系统
里。<code class="keystroke">CTRL-Break</code>)。

<a href="options.html#'printfont'">'printfont'</a> 和 <a href="options.html#'printoptions'">'printoptions'</a> 选项控制打印输出。<a href="options.html#'printheader'">'printheader'</a> 指定页眉的格式。

打印文件根据指定的边界 (margin) 排版，这不受当前窗口的 <a href="options.html#'wrap'">'wrap'</a> 或 <a href="options.html#'linebreak'">'linebreak'</a>
设置影响。<a href="options.html#'printoptions'">'printoptions'</a> 里的 "wrap" 项可以用来关闭回绕。

打印的文本使用当前的高亮色彩，但有以下考虑:
1) 正常的背景色总是白色 (白纸的颜色)。
2) 白色文本和缺省前景总是黑色，这样你才能看得出来！
3) 如果 <a href="options.html#'background'">'background'</a> 是 "dark"，则颜色会加深，否则在白纸上它们因太亮而无法清晰
   辨别。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 打印选项                                             <b class="vimtag"> <a name="print-options">print-options</a> </b></h4>
这里提供改变打印方式的所有选项的细节。设置选项的一般信息见  <a href="options.html#options.txt">options.txt</a> 。

                                                        <b class="vimtag"> <a name="pdev-option">pdev-option</a> </b>
<a href="options.html#'printdevice'">'printdevice'</a> <a href="options.html#'pdev'">'pdev'</a>    字符串  (缺省为空)
                        全局
 <a href="print.html#:hardcopy">:hardcopy</a>  命令的感叹号 (!) 版本跳过打印机选择对话框，本选项指定此时所用的打
印机的名字。在 Win32 上，它必须和标准打印对话框里出现的打印机名字完全一致。
如果该选项为空，vim 会为 ":hardcopy!" 使用系统的缺省打印机。

                                                        <b class="vimtag"> <a name="penc-option">penc-option</a> </b> <b class="vimtag"> <a name="E620">E620</a> </b>
<a href="options.html#'printencoding'">'printencoding'</a> <a href="options.html#'penc'">'penc'</a>  字符串  (缺省为空，除了:
                                        MS-Windows: cp1252，
                                        Macintosh: mac-roman，
                                        VMS: dec-mcs，
                                        HPUX: hp-roman8，
                                        EBCDIC: ebcdic-uk)
                        全局
设置打印时使用的字符编码。本选项告诉 Vim 使用 <a href="options.html#'runtimepath'">'runtimepath'</a> 的 "print" 目录里
哪个打印字符编码文件。

本选项接受任何  <a href="mbyte.html#encoding-names">encoding-names</a>  里的值。任何能识别的名字被转换为 Vim 的标准名
字 - 详情见 <a href="options.html#'encoding'">'encoding'</a>。Vim 不能识别的名字会被转换为小写形式，而且下划线被替换
成 '-' 符号。

如果 <a href="options.html#'printencoding'">'printencoding'</a> 为空或者 Vim 找不到该文件，那么它会用 <a href="options.html#'encoding'">'encoding'</a> (如果此
选项设为 8 位编码的话) 来找到打印字符编码文件。如果 Vim 找不到字符编码文件，那
么使用的是 "latin1" 打印字符编码文件。

如果 <a href="options.html#'encoding'">'encoding'</a> 是多字节编码，Vim 会试图把字符转换为打印编码再进行打印 (如果
<a href="options.html#'printencoding'">'printencoding'</a> 为空，那么转换到 latin1)。转换到非 latin1 的打印编码需要 Vim
编译时加入  <a href="various.html#+iconv">+iconv</a>  特性。如果无法转换，打印会失败。任何不能转换的字符会被倒过
来的问号代替。

提供了四个打印字符编码文件，分别支持缺省的 Mac、VMS、HPUX 和 EBCDIC 字符编码，
而且也是这些平台上缺省使用的。MS-Windows 平台缺省使用代码页 1252 打印字符编
码。

                                                        <b class="vimtag"> <a name="pexpr-option">pexpr-option</a> </b>
<a href="options.html#'printexpr'">'printexpr'</a> <a href="options.html#'pexpr'">'pexpr'</a>     字符串  (缺省: 见下)
                        全局
                        {仅当编译时加入  <a href="various.html#+printer">+printer</a>  和  <a href="various.html#+postscript">+postscript</a>  特性时才有
                        效}
用于打印  <a href="print.html#:hardcopy">:hardcopy</a>  产生的 PostScript 文件的表达式。
要打印的文件名在  <a href="eval.html#v:fname_in">v:fname_in</a> 。
":hardcopy" 命令的参数在  <a href="eval.html#v:cmdarg">v:cmdarg</a> 。
该表达式必须在打印后负责删除文件。如果有错误，表达式必须返回非零值。如果没有
错，返回零或空字符串。
非 MS-Windows 或 VMS 系统的缺省就是简单地使用 "lpr" 来打印文件: 
<code class="example"></code>
<code class="example">    system('lpr' .. (&amp;printdevice == '' ? '' : ' -P' .. &amp;printdevice)</code>
<code class="example">        .. ' ' .. v:fname_in) .. delete(v:fname_in) + v:shell_error</code>

在 MS-Windows 机器上，缺省是把文件复制到当前指定的 printdevice 上: 
<code class="example"></code>
<code class="example">    system('copy' .. ' ' .. v:fname_in .. (&amp;printdevice == ''</code>
<code class="example">                ? ' LPT1:' : (' \"' .. &amp;printdevice .. '\"')))</code>
<code class="example">                .. delete(v:fname_in)</code>

在 VMS 机器上，缺省是把文件发送到缺省或者当前指定的 printdevice 上: 
<code class="example"></code>
<code class="example">    system('print' .. (&amp;printdevice == '' ? '' : ' /queue=' ..</code>
<code class="example">                &amp;printdevice) .. ' ' .. v:fname_in) .. delete(v:fname_in)</code>

如果你改变此选项，使用函数是避免转义所有的空格的简便方法。例如: 
<code class="example"></code>
<code class="example">        :set printexpr=PrintFile()</code>
<code class="example">        :function PrintFile()</code>
<code class="example">        :  call system("ghostview " .. v:fname_in)</code>
<code class="example">        :  call delete(v:fname_in)</code>
<code class="example">        :  return v:shell_error</code>
<code class="example">        :endfunc</code>
<code class="example"></code>
此选项使用不带参数的函数调用会更效，见  <a href="vim9.html#expr-option-function">expr-option-function</a> 。

要记住有些打印程序在读入文件之前就返回控制权。如果你过早地删除文件，它不会被打
印。这些程序通常提供选项，在打印完成时让它们删除文件。
                                                                <b class="vimtag"> <a name="E365">E365</a> </b>
如果表达式计算失败，或者产生非零值，你会得到错误信息。那种情况下，Vim 会删除文
件。非 MS-Windows 的缺省值里使用一个技巧: 加上 "v:shell_error" 会在 system()
调用失败时返回非零值。

以 s: 或  <a href="map.html#%3CSID%3E">&lt;SID&gt;</a>  开始的表达式，用脚本 ID ( <a href="userfunc.html#local-function">local-function</a> ) 替代之。例如: 
<code class="example">                set printexpr=s:MyPrintFile()</code>
<code class="example">                set printexpr=&lt;SID&gt;SomePrintFile()</code>
否则，表达式在设置本选项的脚本的上下文里计算，这样就可用局部于脚本的项目。

为了安全原因，本选项不能在  <a href="options.html#modeline">modeline</a>  或  <a href="eval.html#sandbox">sandbox</a>  里设置。

                                                        <b class="vimtag"> <a name="pfn-option">pfn-option</a> </b> <b class="vimtag"> <a name="E613">E613</a> </b>
<a href="options.html#'printfont'">'printfont'</a> <a href="options.html#'pfn'">'pfn'</a>       字符串  (缺省为 "courier")
                        全局
 <a href="print.html#:hardcopy">:hardcopy</a>  命令输出使用的字体名。它和 <a href="options.html#'guifont'">'guifont'</a> 选项的格式一样，除了只能给出
一个字体的名字，而且不能使用特殊的 "guifont=*" 语法以外。

在 Win32 GUI 版本上，它指定字体名还有附加属性，就如同 <a href="options.html#'guifont'">'guifont'</a> 选项那样。

其他系统上，只能识别 ":h11"，其中 "11" 是字体的点数 (point) 大小。如果忽略，使
用 10 点字。

                                                        <b class="vimtag"> <a name="pheader-option">pheader-option</a> </b>
<a href="options.html#'printheader'">'printheader'</a> <a href="options.html#'pheader'">'pheader'</a> 字符串  (缺省为 "%&lt;%f%h%m%=Page %N")
                        全局
定义  <a href="print.html#:hardcopy">:hardcopy</a>  输出的页眉格式。该选项和 <a href="options.html#'statusline'">'statusline'</a> 选项以同样的方式定义。
如果 Vim 编译时没有加入  <a href="various.html#+statusline">+statusline</a>  特性，本选项没有效果，而使用简单的缺省页
眉，其中只包含页号。同样的简单页眉也用在此选项为空的时候。

                                                        <b class="vimtag"> <a name="pmbcs-option">pmbcs-option</a> </b>
<a href="options.html#'printmbcharset'">'printmbcharset'</a> <a href="options.html#'pmbcs'">'pmbcs'</a>  字符串 (缺省为 "")
                          全局
设置  <a href="print.html#:hardcopy">:hardcopy</a>  产生 CJK 输出时使用的 CJK 字符集。目前，Vim 识别以下这些预先
定义的值:

<code class="section">                值              描述 </code>
  中文          GB_2312-80
  (简体)        GBT_12345-90
                MAC             Apple Mac Simplified Chinese
                GBT-90_MAC      GB/T 12345-90 Apple Mac Simplified Chinese
                GBK             GBK (GB 13000.1-93)
                ISO10646        ISO 10646-1:1993

  中文          CNS_1993        CNS 11643-1993, Planes 1 &amp; 2
  (繁体)        BIG5
                ETEN            Big5，带 ETen 扩展
                ISO10646        ISO 10646-1:1993

  日文          JIS_C_1978
                JIS_X_1983
                JIS_X_1990
                MSWINDOWS       Win3.1/95J (JIS X 1997 + NEC + IBM 扩展)
                KANJITALK6      Apple Mac KanjiTalk V6.x
                KANJITALK7      Apple Mac KanjiTalk V7.x

  韩文          KS_X_1992
                MAC             Apple Macintosh Korean
                MSWINDOWS       KS X 1992，带 MS 扩展
                ISO10646        ISO 10646-1:1993

上面的值和 <a href="options.html#'printencoding'">'printencoding'</a> 只有特定的一些组合。下表显示合法的组合可能:

<code class="section">                                euc-cn   gbk    ucs-2   utf-8 </code>
  中文          GB_2312-80         x
  (简体)        GBT_12345-90       x
                MAC                x
                GBT-90_MAC         x
                GBK                        x
                ISO10646                          x       x

<code class="section">                                euc-tw   big5   ucs-2   utf-8 </code>
  中文          CNS_1993           x
  (繁体)        BIG5                       x
                ETEN                       x
                ISO10646                          x       x

<code class="section">                                euc-jp   sjis   ucs-2   utf-8 </code>
  日文          JIS_C_1978         x       x
                JIS_X_1983         x       x
                JIS_X_1990         x              x       x
                MSWINDOWS                  x
                KANJITALK6                 x
                KANJITALK7                 x

<code class="section">                                euc-kr   cp949  ucs-2   utf-8 </code>
  韩文          KS_X_1992          x
                MAC                x
                MSWINDOWS                  x
                ISO10646                          x       x

要设置打印日文文本所用的合适的编码和字符集，你需要做； 
<code class="example">        :set printencoding=euc-jp</code>
<code class="example">        :set printmbcharset=JIS_X_1983</code>
<code class="example"></code>
如果 <a href="options.html#'printmbcharset'">'printmbcharset'</a> 不是以上给出的值，就假定这是个自定义的多字节字符集，因而
没有它是否与 <a href="options.html#'printencoding'">'printencoding'</a> 的值兼容的检查。Vim 会在 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的
"print" 目录下寻找定义该字符集的文件。

                                                        <b class="vimtag"> <a name="pmbfn-option">pmbfn-option</a> </b>
<a href="options.html#'printmbfont'">'printmbfont'</a> <a href="options.html#'pmbfn'">'pmbfn'</a>   字符串 (缺省为 "")
                        全局
这是逗号分隔的字段列表，用于  <a href="print.html#:hardcopy">:hardcopy</a>  生成的 CJK 输出使用的字体名。每个字体
名必须有一个字符前导，指示要使用的字体的风格，如下:

  r:<code class="special">{font-name}</code>         用于普通字符的字体
  b:<code class="special">{font-name}</code>         用于粗体字符的字体
  i:<code class="special">{font-name}</code>         用于斜体字符的字体
  o:<code class="special">{font-name}</code>         用于粗体斜体字符的字体

执行 CJK 打印时，带有 r: 前缀的字体是必需的。其它字体名的描述符可选。如果某个
描述符不存在，使用另一个字体，如下:

  如果 b: 不存在，使用 r:
  如果 i: 不存在，使用 r:
  如果 o: 不存在，使用 b:

有些 CJK 字体不包含 ASCII 代码范围内的字符编码。还有，在少量代码点上，有些 CJK
ASCII 代码范围里的字符和传统的 ASCII 字符有差异。有两个附加的域可以用来控制
ASCII 代码范围内的字符打印。

  c:yes                 使用 Courier 字体打印 ASCII 代码范围内的字符。
  c:no (缺省)

  a:yes                 在 ASCII 代码范围内的代码使用 ASCII 字符集。
  a:no (缺省)

下面的例子指定两个多字节字体，一个用于普通和斜体打印，一个用于粗体和粗体斜体打
印，它使用 Courier 打印 ASCII 代码范围内的代码，但使用国家字符集: 
<code class="example">        :set printmbfont=r:WadaMin-Regular,b:WadaMin-Bold,c:yes</code>

                                                        <b class="vimtag"> <a name="popt-option">popt-option</a> </b>
<a href="options.html#'printoptions'">'printoptions'</a> <a href="options.html#'popt'">'popt'</a>   字符串  (缺省为 "")
                        全局
                        <code class="notvi">{仅当编译时加入  <a href="various.html#+printer">+printer</a>  特性才有效}</code>
这是逗号分隔的项目列表，控制  <a href="print.html#:hardcopy">:hardcopy</a>  的输出格式:

  left:<code class="special">{spec}</code>           左边界 (缺省: 10pc)
  right:<code class="special">{spec}</code>          右边界 (缺省: 5pc)
  top:<code class="special">{spec}</code>            顶部边界 (缺省: 5pc)
  bottom:<code class="special">{spec}</code>         底部边界 (缺省: 5pc)
                        <code class="special">{spec}</code> 是一个数字，后面跟 "in" 代表英寸，"pt" 代表点数
                        (1 点等于 1/72 英寸)，"mm" 代表毫米，或者 "pc" 代表媒
                        介大小的百分比。
                        古怪的例子:
                            left:2in,top:30pt,right:16mm,bottom:3pc
                        如果单位不能识别，不会出错。只是使用缺省值。

  header:<code class="special">{nr}</code>           保留作页眉的行数。
                        只填入第一行，所以如果 <code class="special">{nr}</code> 为 2，有一个空行。页眉的格
                        式由 <a href="options.html#'printheader'">'printheader'</a> 控制。
  header:0              不打印页眉。
  header:2  (缺省)      页眉使用两行

  syntax:n              不使用语法高亮。这样更快，因而打印大文件也更实用。
  syntax:y              使用语法高亮。
  syntax:a  (缺省)      如果打印机可以打印色彩或者灰色，使用语法高亮。

  number:y              打印输出里包含行号。
  number:n  (缺省)      没有行号。

  wrap:y    (缺省)      回绕长行。
  wrap:n                截断长行。

  duplex:off            单面打印。
  duplex:long (缺省)    双面打印 (如果可以)，长边装订。
  duplex:short          双面打印 (如果可以)，短边装订。

  collate:y  (缺省)     逐份打印: 1 2 3，1 2 3，1 2 3
  collate:n             非逐份打印: 1 1 1，2 2 2，3 3 3

  jobsplit:n (缺省)     单个打印任务完成所有份数
  jobsplit:y            每份使用不同的打印任务。用于 N-路后期处理。

  portrait:y (缺省)     打印方向为竖向。
  portrait:n            打印方向为横向。
                                                <b class="vimtag"> <a name="a4">a4</a> </b> <b class="vimtag"> <a name="letter">letter</a> </b>
  paper:A4   (缺省)     纸张大小: A4
  paper:<code class="special">{name}</code>          纸张大小可见下表:
<code class="section">                        <code class="special">{name}</code>      厘米计的尺寸     英寸计的尺寸</code>
                        10x14       25.4  x 35.57    10    x 14
                        A3          29.7  x 42       11.69 x 16.54
                        A4          21    x 29.7      8.27 x 11.69
                        A5          14.8  x 21        5.83 x  8.27
                        B4          25    x 35.3     10.12 x 14.33
                        B5          17.6  x 25        7.17 x 10.12
                        executive   18.42 x 26.67     7.25 x 10.5
                        folio       21    x 33        8.27 x 13
                        ledger      43.13 x 27.96    17    x 11
                        legal       21.59 x 35.57     8.5  x 14
                        letter      21.59 x 27.96     8.5  x 11
                        quarto      21.59 x 27.5      8.5  x 10.83
                        statement   13.97 x 21.59     5.5  x  8.5
                        tabloid     27.96 x 43.13    11    x 17

  formfeed:n (缺省)     把换页字符 (0x0c) 看成普通的打印字符。
  formfeed:y            遇到换页字符时，当前行从新页的第一行开始处继续打印。

没有给出某项目时，使用标明为 (缺省) 的项目。不需要总是给出这些值，尤其是可以使
用对话框来选择打印机和选项。
例如: 
<code class="example">        :set printoptions=paper:letter,duplex:off</code>

</section><hr class="doubleline" /><section class=inner>
<h4>3 PostScript 打印                                       <b class="vimtag"> <a name="postscript-printing">postscript-printing</a> </b></h4>                                                <b class="vimtag"> <a name="E455">E455</a> </b> <b class="vimtag"> <a name="E456">E456</a> </b> <b class="vimtag"> <a name="E457">E457</a> </b> <b class="vimtag"> <a name="E624">E624</a> </b>
只要你有足够的磁盘空间，产生一个 PostScript 文件当无问题。你需要正确安装运行时
文件 (如果你能找到帮助文件，它们大概都已经安装好了)。

PostScript 打印有若干限制:

- <a href="options.html#'printfont'">'printfont'</a> - 字体名被忽略 (总是用 Courier 家族字体 - 它应在所有 PostScript
  打印机上可用) 但还能指定字体大小。

- <a href="options.html#'printoptions'">'printoptions'</a> - 产生 PostScript 输出时使用了双面打印设置，但是否如此打印决
  定于打印机本身。如果打印机不支持双面打印，则该设置应简单给予忽略。但是有些打
  印机彻底不能打印。

- 8 位支持 - 尽管很多 8 位打印字符编码得到支持，还是有可能部分字符无法打印。这
  决定于打印机所带的字体是否能识别该字符。丢失的字符会以一个倒转的问号代替，或
  者如果该字体不能识别该字符的话，则留一个空格。安装新版的 Courier 字体家族可
  能会使某一个编码里的字符完全得到支持。

- 多字节支持 - 目前，Vim 会试图把多字节字符转换为 <a href="options.html#'printencoding'">'printencoding'</a>  (如果为空，
  latin1) 所指定的 8 位编码。不能成功转换的字符会显示为未知字符。如果 Vim 不
  能完成该转换，打印将会失败。

</section><hr class="doubleline" /><section class=inner>
<h4>4. 自定义 8 位打印字符编码                      <b class="vimtag"> <a name="postscript-print-encoding">postscript-print-encoding</a> </b></h4>                                                                <b class="vimtag"> <a name="E618">E618</a> </b> <b class="vimtag"> <a name="E619">E619</a> </b>
打印 8 位字符数据，如果要使用你自己的打印字符编码，你需要定义自己的 PostScript
字体编码。关于如果定义字体编码向量的细节超出了本帮助文件的范围。为此，你可查阅
Addison-Wesley 出版的 PostScript 语言参考手册第三版，或从 <a href="http://www.adobe.com">http://www.adobe.com</a>
得到 PDF 版本。以下，说明一下如果使 Vim 找到并使用你自己的打印字符编码。

i.   为你的编码向量定义一个唯一的名字，以不与 Vim 使用的已识别的或标准的编码名
     字冲突为原则 (这些编码可以参见  <a href="mbyte.html#encoding-names">encoding-names</a> )。最好是一个别人也不太可
     能使用的名字。
ii.  把 $VIMRUNTIME/print/latin1.ps 复制到你的 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的 print 子目录
     并换成你选好的唯一的名字。
iii. 编辑你换名了的 latin1.ps。把所有出现的 latin1 替代成你的编码名 (不要忘了
     %%Title: 开头的那行)。同时，把字型名字 (glyph names) 数组改成你新定义的
     编码向量。该数组必须恰好有 256 项，不然你无法打印！
iv.  在 Vim 里，设置 <a href="options.html#'printencoding'">'printencoding'</a> 为你的唯一的编码名，然后打印你的文件。
     Vim 会使用你自定义的打印字符编码。

如果除了 %%Title: 开头一行里的编码名字和 %%Version:: 开头的一行里的版本以外，
你修改了前三行的顺序或者任何别的内容，Vim 会报告此资源文件有错误。

[对通晓 PostScript 者的技术解释 - Vim 打印时，查找并使用和编码同名的文件。该文
件定义一个新的名为 /VIM-name 的 PostScript Encoding 资源，其中 name 即 Vim 会
使用的打印字符编码。]

</section><hr class="doubleline" /><section class=inner>
<h4>5. PostScript CJK 打印                          <b class="vimtag"> <a name="postscript-cjk-printing">postscript-cjk-printing</a> </b></h4>                                                        <b class="vimtag"> <a name="E673">E673</a> </b> <b class="vimtag"> <a name="E674">E674</a> </b> <b class="vimtag"> <a name="E675">E675</a> </b>

Vim 支持打印中文、日文和韩文文件。要能正确地打印 CJK 文件，Vim 需要设置更多的
选项。

这些国家有许多标准字符集和编码，打印时两者都要指定。另外，CJK 字体通常没有斜体
字形的概念，为了在打印时达到强调的效果，需要使用不同的重量 (weight) 和风格
(stroke style)。因此，要指定打印时使用的字体，需要不同的方法。

<a href="options.html#'printencoding'">'printencoding'</a> 和 <a href="options.html#'printmbcharset'">'printmbcharset'</a> 选项分别指定编码和字符集。如果没有设置
<a href="options.html#'printencoding'">'printencoding'</a>，就像一般使用那样，使用 <a href="options.html#'encoding'">'encoding'</a>。如果设定 <a href="options.html#'printencoding'">'printencoding'</a>，
打印时字符会被翻译成此编码。你要确保该编码和文件内容需要的字符集兼容，否则有些
字符可能打印不出来。

<a href="options.html#'printmbfont'">'printmbfont'</a> 指定 CJK 打印要用的字体。该选项允许你指定在语法高亮时使用不同字
体风格: 普通、斜体、粗体和粗体斜体的字符使用不同的打印字体，

Vim 不提供 CJK 字体。一些免费的中 (繁体) 日韩字体可以在这里得到:

  <a href="http://examples.oreilly.com/cjkvinfo/adobe/samples/">http://examples.oreilly.com/cjkvinfo/adobe/samples/</a>

在 readme 文件里可以找到这些字体的说明，它在

  <a href="http://examples.oreilly.de/english_examples/cjkvinfo/adobe/00README">http://examples.oreilly.de/english_examples/cjkvinfo/adobe/00README</a>

请阅读你的打印机文档，以了解如何安装新的字体。

CJK 字体可以很大，因为它们包含了数以千计的字形，即使如此，某个字体只包含了国家
标准的一个子集也是很常见的。如果你发现打印输出没有半宽的罗马字符，你需要在
<a href="options.html#'printmbfont'">'printmbfont'</a> 里配置 Vim 使用 Courier 字体来打印半宽 ASCII 字符。如果你的字体
不包括其它字符，也许你需要找一个能够包含所有需要的字形的字体。

另一个 ASCII 字符的问题是若干国家字符集指定一些 ASCII 代码范围的代码使用不同的
字形。如果你用国家字符集打印 ASCII 文本，你可能会看到意想不到的字符。如果你需
要真正的 ASCII 代码打印，你需要用 <a href="options.html#'printmbfont'">'printmbfont'</a> 来配置 Vim 使 ASCII 代码范围内
的代码输出 ASCII 字符。

可以定义你自己的多字节字符集，虽然这个过程不应轻易尝试。关于此过程的讨论超出了
这些帮助文件的范围。具体细节可见 <a href="http://www.adobe.com">http://www.adobe.com</a> 提供的 PDF 文件格式的文
档 'Adobe CMap and CIDFont Files Specification, Version 1.0' 里的 CMap (字符映
射表) 文件。

</section><hr class="doubleline" /><section class=inner>
<h4>6. PostScript 打印疑难解答                      <b class="vimtag"> <a name="postscript-print-trouble">postscript-print-trouble</a> </b></h4>                                                                        <b class="vimtag"> <a name="E621">E621</a> </b>
通常唯一说明打印 PostScript 出现问题的症状是你的打印结果没有出现。如果你运气
好，你也许会得到一页打印说明，告诉你哪个 PostScript 操作符产生了使打印无法继续
下去的错误。

有若干使打印失败的可能的原因:

- prolog 资源文件版本错误。prolog 资源文件包含一些 Vim 用来打印的必需的
  PostScript。每个 Vim 版本需要它一个不同的版本。确信你安装了正确的运行时的文
  件，而且没有在你的 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的 print 目录里保留了一个旧版本的 prolog
  文件。

- 纸张大小。有些 PostScript 打印机会因为不支持请求的纸张大小而中止打印。缺省，
  Vim 用 A4 纸。用 <a href="options.html#'printoptions'">'printoptions'</a> 找到和设置你打印机合用的纸张大小。如果你找不
  到所用纸张的名字，度量打印纸的尺寸，然后和 <a href="options.html#'printoptions'">'printoptions'</a> 里支持的纸张大小列
  表逐一比较，然后用宽 <code class="emphasis">和</code> 高都最接近的纸张。 <code class="note">注意</code>: 实际的纸张尺寸和列出的大小
  可能稍有差异。如果没有相近的纸张被列出，那你可以试试以下讨论的 PSUtils 里的
  psresize 工具。

- 双面打印 (duplex)。通常，不支持双面打印的 PostScript 打印机只是忽略该请求。
  但有的打印机就彻底放弃该打印任务。试试关掉 duplex 再打印。<code class="note">注意</code>: 用 PSUtils
  里的工具可以手动设置双面打印 - 见下。

- 逐份打印 (collated)。和双面打印一样，大多数不支持逐份打印的打印机只是忽略该
  请求。有的或许不是这样。试试关掉逐份打印的选项。

- 语法高亮。有些打印管理代码不让含有语法高亮的 PostScript 文件在黑白打印机上打
  印，即使唯一用到的颜色是黑色。试试关掉语法高亮。

一个安全的 printoptions 设置是: 
<code class="example"></code>
<code class="example">        :set printoptions=paper:A4,duplex:off,collate:n,syntax:n</code>
<code class="example"></code>
把 "A4" 换成你的打印机纸最适合的纸张大小。

</section><hr class="doubleline" /><section class=inner>
<h4>7. PostScript 工具                              <b class="vimtag"> <a name="postscript-print-util">postscript-print-util</a> </b></h4>
7.1 Ghostscript

Ghostscript 是一个 PostScript 和 PDF 的解释器，从而可以显示和在非 PostScript
的打印机上打印 PostScript 和 PDF 文件。它还可以把 PostScript 文件转换成 PDF 文
件。

Ghostscript 可在多种平台上运行。

有三个可用的版本:

- AFPL Ghostscript (以前的 Aladdin Ghostscript) 是对非商业用途免费的。它可如下
  得到:

    <a href="http://www.cs.wisc.edu/~ghost/">http://www.cs.wisc.edu/~ghost/</a>

- GNU Ghostscript 可在 GNU General Public License 下，从以下地址得到:

    ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/

- 用于商业产品的一个商业版本。

更多关于 Ghostscript 的信息可以在这里找到:

  <a href="http://www.ghostscript.com/">http://www.ghostscript.com/</a>

该发布包含对许多非 PostScript 打印机的标准支持。如果你没找到对你的打印机的支
持，查一下 Ghostscript 网站了解如何支持其他缺省没有支持的打印机。


7.2 Ghostscript 预览器

Ghostscript 界面十分原始，所以有不少图形化的前端程序。它们提供了方便的
PostScript 文件选择，不同放大倍数的预览，还有打印。具体细节可查看它们提供的文
档。

X11

- Ghostview。可如下取得:

    <a href="http://www.cs.wisc.edu/~ghost/gv/">http://www.cs.wisc.edu/~ghost/gv/</a>

- gv。基于 Ghostview。可如下取得:

    <a href="http://wwwthep.physik.uni-mainz.de/~plass/gv/">http://wwwthep.physik.uni-mainz.de/~plass/gv/</a>

  这里也能找到 (也许不是最新的):

    <a href="http://www.cs.wisc.edu/~ghost/gv/">http://www.cs.wisc.edu/~ghost/gv/</a>

OpenVMS

- 看起来，在主代码已经支持 (未经测试)。见:

    <a href="http://wwwthep.physik.uni-mainz.de/~plass/gv/">http://wwwthep.physik.uni-mainz.de/~plass/gv/</a>

MS-Windows

- GSview。可如下取得:

    <a href="http://www.cs.wisc.edu/~ghost/gsview/">http://www.cs.wisc.edu/~ghost/gsview/</a>

Linux

- GSview。流行的 MS-Windows 预览器的 Linux 版本。可如下取得:

    <a href="http://www.cs.wisc.edu/~ghost/gsview/">http://www.cs.wisc.edu/~ghost/gsview/</a>

- BMV。和 Ghostview 与 gv 不同，它不使用 X 而使用 svgalib。可如下取得:

    ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz


7.3 PSUtils

PSUtils 是一组操作 Postscript 文档的工具程序。可以得到许多平台上的二进制发布和
完全的源代码。PSUtils 可如下得到:

  <a href="http://knackered.org/angus/psutils">http://knackered.org/angus/psutils</a>

我们感兴趣的工具包括:

- psnup.     把 PS 文件转化为 N-路打印版本。
- psselect.  选择页范围和打印顺序。
- psresize.  改变页面大小。
- psbook.    重新排列顺序和页面排版，从而打印成册。

一个程序的输出可以作为另一个的输入，从而可以创建复杂的打印文档。


N-路 打 印

psnup 工具把一个 Vim 生成的 PostScript 文件转化为一个 n-路版本 (即在一物理页上
打印 n 个逻辑页)。最简单的生成 2-路输出的方法是先如下一个创建 PostScript 文
件: 
<code class="example"></code>
<code class="example">        :hardcopy &gt; test.ps</code>
<code class="example"></code>
然后在你的命令行上执行: 
<code class="example"></code>
<code class="example">        psnup -n 2 test.ps final.ps</code>

<code class="note">注意</code>: 有些 Ghostscript 预览器可能会对 psnup 产生的文件给出<code class="note">警告</code> - 可以安全地忽
略。

最后，用你平台上的打印命令把 final.ps 输出到 PostScript 打印机上。(这以后，你
需要自己删除中间文件: 两个 PostScript 文件)。可以修改 <a href="options.html#'printexpr'">'printexpr'</a> 来执行这项打
印前的额外转换。


双 面 打 印 的 替 代 方 法

用 PS 工具 psselect 可以完成一个原始的双面打印任务。该工具有 -e 和 -o 选项，
可以分别打印一个 PS 文件的偶数页和奇数页。

先用 <code class="badlink">'hardcopy'</code> 命令生成 PS 文件，然后如下生成只包含奇数和偶数页的新文件: 
<code class="example"></code>
<code class="example">        psselect -o test.ps odd.ps</code>
<code class="example">        psselect -e test.ps even.ps</code>
<code class="example"></code>
然后用你平台上普通的打印命令打印 odd.ps。然后取出打印输出，翻过来，重新放到取
纸器里。然后用你平台上的打印命令打印 even.ps。现在，所有的偶数页面应该出现在奇
数页的反面。

要记住以下几点:

1. 第一页的位置。如果打印奇数页时第一页出现在最上方，那你需要倒转奇数页打印的
   顺序。这可以通过 psselect 的 -r 选项完成。这样可以保证第 2 页打印在第 1 页
   的反面。
   <code class="note">注意</code>: 倒转奇数页的打印顺序比倒转偶数页更合适。因为原始的 PS 文件里可能有奇
   数页。

2. 纸张方位。取出奇数页的打印输出时，你或者需要横向翻转 (沿着长边)，或者需要纵
   向翻转 (沿着短边)，甚至有可能要旋转 180 度。这决定于打印机 - 桌上型的喷墨打
   印机可能比看不见纸张打印的路径的办公室激光打印机更明显一点。


</section><hr class="doubleline" /><section class=inner>
<h4>8. 换页字符                                             <b class="vimtag"> <a name="printing-formfeed">printing-formfeed</a> </b></h4>
缺省，Vim 不对换页 formfeed 控制字符作任何特殊处理。设置 <a href="options.html#'printoptions'">'printoptions'</a> 的
formfeed 项，使得 Vim 可以识别换页字符，从而在新的一页里打出当前行。换页字符
提供了较为原始的打印控制。不过，还是有若干事情需要<code class="note">注意</code>。

Vim 总是从包含换页字符的那行开始打印 (如果有相应设置，还包括行号)，即使它是这
一行的第一个字符。这意味着，如果以换页字符开头的一行刚好在一页的第一行，Vim 就
会打印完全空白的一页。

因为行号在包含换页字符的一行的开始打印，在新页打印的该行的其余部分就不会有行号
(和 <a href="options.html#'printoptions'">'printoptions'</a> 里置位了 wrap 项时长行的回绕行的打印结果相同)。

如果换页字符是一行的最后一个字符，那么打印会从新页的第二行而不是第一行开始。这
是因为 Vim 在换页字符后处理行尾，从而在继续打印之前先往下移动了一行。

根据以上几点，我们推荐如果使用换页字符处理，关闭行号的打印，而且不要在行尾用换
页字符。即使如此，你还是需要调整换页符之前的行的数目，以防止偶尔出现的空白页。

</section><hr class="doubleline" /><section class=inner>
<h4> vim:tw=78:ts=8:noet:ft=help:norl:</h4></section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
